#include "link_list.h"

// 单链表的创建
Link_list* init_link_list(void)
{
    // 1 创建 头节点的动态空间
    Link_list * list = (Link_list *)malloc(sizeof(Link_list));
    if (NULL == list)
    {
        printf("创建失败\n");
        return NULL;
    }
    
    list->next = NULL;

    return list;
}

//单向链表的遍历
void print_link_list(Link_list* list)
{
    Node * ptr = list->next;
    for (size_t i = 0; ptr != NULL; i++)
    {
        printf("姓名:%s 性别:%s 年龄:%d 成绩:%d 学号:%d\n",
            ptr->data.name , ptr->data.sex , ptr->data.age , 
            ptr->data.sco  , ptr->data.id 
            );
        ptr = ptr->next;
    }
}

//尾插
void insert_node_tail(Link_list* list, Elenemt_data data)
{
    Node * new_node = (Node *)malloc(sizeof(Node)); // 创建结点
    Node * ptr = list->next;
    for (size_t i = 0; ptr->next != NULL; i++)
    {
       ptr = ptr->next;
    }
    ptr->next = new_node;
    ptr->next->data = data;
    new_node->next = NULL;
    
}

//尾删
void delete_node_tail(Link_list* list)
{
    Node * ptr = list->next;
    Node * ptr_1 = list->next;
    for (size_t i = 0; ptr->next != NULL; i++)
    {
       ptr = ptr->next;
    }
    for (size_t j = 0;  ptr_1->next->next!=NULL; j++)
    {
        ptr_1 = ptr_1->next;
    }
    free(ptr);
    ptr_1->next = NULL;
}

// 单链表的销毁
void free_link_list(Link_list ** list)
{
    if (NULL == *list)
    {
        printf("链表 为 NULL\n");
        return ;
    }

    // 1 销毁结点
    Node * ptr_1 = (*list)->next;
    Node * ptr_2 = ptr_1->next;
    for (size_t i = 0; ptr_1 != NULL; i++)
    {
        free(ptr_1);
        // if 判断  判断 ptr2 = NULL 的时候 我们如何处理
        ptr_1 = ptr_2;
        if (NULL != ptr_2)
        {
            ptr_2 = ptr_2->next;
        }
        
    }
    

    // 2 销毁头结点
    free(*list);
    *list = NULL;
}

